//
//  ZQStatusListViewModel.swift
//  Created on 2019/11/29
//  Description <#文件描述#>
//  Copyright © 2019 Huami inc. All rights reserved.
//  @author huangjianwen(huangjianwen@huami.com)    
//
/*
   如果类需要使用 kvc 或者字典转模型框架设置对象值，类就需要继承至NSObject
   如果只是包装了一些代码逻辑(写了一些函数),可以不用任何d父类,好处轻量级
   OC 写均需要继承NSObject
 */
import Foundation

/// 上拉的最大次数
private let maxPullupTryTimes = 3

class ZQStatusListViewModle {
    lazy var statusList = [ZQStatus]()
    
    /// 上拉刷新错误次数
    private var pullupErrorTimes = 0
    
    
    /// 微博数据网络请求接口
    /// - Parameters:
    ///   - pullup: 是否是上拉加载更多
    ///   - complete: 完成回调（是否网络加载成功，是否有更多的上拉加载更多）
    func  loadStatus(pullup: Bool, complete:@escaping  (_ isSuccess: Bool, _ shouldRefresh: Bool)->()) {
        
        // 判断是否是上拉刷新,同时检查刷新错误
        if pullup && pullupErrorTimes > maxPullupTryTimes {
            
            complete(true,false)
            
            return
        }
        
        // since_id 去除数组中第一条微博的id
        let since_id = pullup ? 0 : (statusList.first?.id ?? 0)
        
        // 上拉加载，去除数组中的最后一条微博的id
        let max_id = !pullup ? 0 : (statusList.last?.id ?? 0)
        
        ZQNetWorkManager.shared.statusList (since_id: since_id, max_id: max_id) { (list, isSuccess) in

            //1. 字典转模型
            guard  let array = NSArray.yy_modelArray(with: ZQStatus.self, json: list ?? []) as? [ZQStatus] else {
                complete(isSuccess,false)
                return
            }
            
            // 2.拼接数据
            print("刷新到\(array.count)条")
            
            // 是否下拉加载更多
            if pullup {
                self.statusList += array
            } else {
                self.statusList = array + self.statusList;
            }
        
            // 3.判断上拉刷新的量
            if pullup && array.count == 0 {
                
                self.pullupErrorTimes += 1
                
                complete(isSuccess,false)
            } else {
                complete(isSuccess, true)
            }
        }
    }
}
